<?php

namespace Drinkiit\BlogBundle\Handler;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;

use Drinkiit\BlogBundle\Entity\Article;
use Drinkiit\BlogBundle\Entity\Commande;
use Drinkiit\BlogBundle\Entity\Article_commande;

class MemberCommandeHandler
{
    protected $form;
    protected $request;
    protected $em;
    protected $controller;

    public function __construct(Form $form, Request $request, Controller $controller, EntityManager $em)
    {
        $this->form    = $form;
        $this->request = $request;
        $this->em      = $em;
        $this->controller = $controller ;
    }

    public function process()
    {
        if( $this->request->getMethod() == 'POST' )
        {
            $this->form->bindRequest($this->request);

            if( $this->form->isValid() )
            {
				$session = $this->request->getSession(); // on ouvre la session
				/* on peut afficher les données récupérées
				echo $this->form->get('produit')->getData() ;
				echo $this->form->get('quantite')->getData() ;
				echo $this->form->get('specificite')->getData() ;
				//*/
				$article = $this->form->getData() ;
				
				$art = $this->em->getRepository('DrinkiitBlogBundle:Article')->findBy(array(
					'produit' => $this->form->get('produit')->getData(),
					'quantite' => $this->form->get('quantite')->getData(),
					'specificite' => $this->form->get('specificite')->getData(),
				)) ;
				if ( is_object($art) )
				{
					$article = $art ;
				} else {
					$this->onSuccess($article); // on créé l'article
				}
				
				//$this->get('logger')->info("[INFO] L'article n°".$article->getId()." a été créé.") ;
				
				$commande = $this->em->getRepository('DrinkiitBlogBundle:Commande')->find($session->get('panier')) ; // on récupère la commande
				$article_commande = new Article_commande() ; // on créé un nouvel article commandé
				$article_commande->setArticleCommande($commande) ; // on le lie à sa commande
				$article_commande->setTypeArticle($article) ; // et a son article nouvellement créé
				//$this->get('logger')->info("[INFO] L'article n°".$article->getId()." a bien été lié à la commande n°".$commande->getId()) ;
				$this->controller->get('logger')->info("[INFO] L'article n°".$article->getId()." a bien été ajouté à la commande n°".$commande->getId());
				$this->onSuccess($article_commande); // puis on garde en base

                return true;
            }
            $this->controller->get('logger')->info("[INFO] Le formulaire d'ajout d'article n'est pas valide.") ;
        }

        return false;
    }

    public function onSuccess($objet)
    {
        $this->em->persist($objet);
        $this->em->flush();
    }
}
